import mongoose from 'mongoose'; // 导入mongoose

// 连接MongoDB
mongoose.connect('mongodb://localhost:27017/gmv_demo', {
  useNewUrlParser: true,
  useUnifiedTopology: true
});

// 定义订单Schema
const orderSchema = new mongoose.Schema({
  orderNo: String, // 订单编号
  customerName: String, // 客户姓名
  amount: Number, // 订单金额
  status: String, // 订单状态
  paymentMethod: String, // 支付方式
  orderTime: Date, // 下单时间
  products: [
    {
      name: String, // 商品名称
      price: Number, // 商品价格
      quantity: Number // 商品数量
    }
  ]
});

// 创建订单模型
const Order = mongoose.model('Order', orderSchema);

// 商品Schema（需与server.js保持一致）
const productSchema = new mongoose.Schema({
  name: String, // 商品名称
  category: String, // 商品分类
  stock: Number, // 库存
  price: Number // 单价
});
const Product = mongoose.model('Product', productSchema);

// 初始化商品数据
await Product.deleteMany({}); // 清空商品表
const productList = [
  { name: 'iPhone 15 Pro', category: '手机', stock: 100, price: 8999 },
  { name: '小米电视 65寸', category: '家电', stock: 50, price: 2999 },
  { name: '华为Mate60 Pro', category: '手机', stock: 80, price: 6999 },
  { name: '联想ThinkPad X1', category: '电脑', stock: 30, price: 12999 },
  { name: '美的空调 1.5匹', category: '家电', stock: 60, price: 2499 },
  { name: '戴尔显示器 27寸', category: '电脑配件', stock: 40, price: 1899 },
  { name: '苹果MacBook Air', category: '电脑', stock: 35, price: 7999 },
  { name: '索尼PS5', category: '数码', stock: 20, price: 3899 },
  { name: '三星Galaxy S24', category: '手机', stock: 70, price: 5999 },
  { name: '小米14 Ultra', category: '手机', stock: 90, price: 6499 },
  { name: 'OPPO Find X7', category: '手机', stock: 60, price: 5499 },
  { name: 'vivo X100 Pro', category: '手机', stock: 65, price: 5999 }
];
await Product.insertMany(productList);
console.log('商品数据已初始化');

// 生成订单数据，确保商品名称与products集合一致
const generateOrders = () => {
  const customers = ['张三', '李四', '王五', '赵六', '孙七', '周八', '吴九', '郑十', '钱十一', '孙十二', '周十三', '吴十四'];
  const products = productList; // 直接用上面初始化的商品
  const paymentMethods = ['支付宝', '微信支付', '银行卡', '现金'];
  const statuses = ['待付款', '已付款', '待发货', '已发货', '已完成', '已取消'];
  
  const orders = []; // 订单数组
  const today = new Date(); // 获取今天日期
  
  // 生成50-100条随机订单
  const orderCount = Math.floor(Math.random() * 51) + 50; // 50-100条订单
  
  for (let i = 0; i < orderCount; i++) {
    // 生成今天随机时间
    const orderTime = new Date(today.getFullYear(), today.getMonth(), today.getDate(), Math.floor(Math.random()*24), Math.floor(Math.random()*60), Math.floor(Math.random()*60));
    const productCount = Math.floor(Math.random() * 3) + 1; // 1-3个商品
    const orderProducts = []; // 订单商品数组
    let orderAmount = 0; // 订单金额
    
    // 生成订单商品
    for (let j = 0; j < productCount; j++) {
      const product = products[Math.floor(Math.random() * products.length)]; // 随机选择商品
      const quantity = Math.floor(Math.random() * 3) + 1; // 1-3个数量
      orderProducts.push({
        name: product.name, // 保证名称一致
        price: product.price,
        quantity: quantity
      });
      orderAmount += product.price * quantity; // 计算订单金额
    }
    
    // 生成订单编号
    const orderNo = `GMV${today.getFullYear()}${String(today.getMonth() + 1).padStart(2, '0')}${String(today.getDate()).padStart(2, '0')}${String(i + 1).padStart(4, '0')}`;
    
    let status = statuses[Math.floor(Math.random() * statuses.length)];
    if (i < 20) status = '已完成'; // 保证前20条为已完成
    
    orders.push({
      orderNo: orderNo, // 订单编号
      customerName: customers[Math.floor(Math.random() * customers.length)], // 客户姓名
      amount: orderAmount, // 订单金额
      status: status,
      paymentMethod: paymentMethods[Math.floor(Math.random() * paymentMethods.length)], // 支付方式
      orderTime: orderTime, // 下单时间（今天）
      products: orderProducts // 商品信息
    });
  }
  
  return orders; // 返回订单数组
};

// 初始化数据
const initData = async () => {
  try {
    console.log('开始初始化订单数据...'); // 开始提示
    
    // 清空现有数据
    await Order.deleteMany({}); // 删除所有现有订单
    console.log('已清空现有订单数据'); // 清空提示
    
    // 生成新订单数据
    const orders = generateOrders(); // 生成订单数据
    console.log(`生成了 ${orders.length} 条订单数据`); // 生成提示
    
    // 插入数据到数据库
    await Order.insertMany(orders); // 批量插入订单
    console.log('订单数据已成功插入MongoDB'); // 插入成功提示
    
    // 验证数据
    const count = await Order.countDocuments(); // 统计订单数量
    console.log(`数据库中现有 ${count} 条订单`); // 验证提示
    
    // 计算今日GMV
    const today = new Date(); // 获取今天日期
    const start = new Date(today.getFullYear(), today.getMonth(), today.getDate()); // 今天开始时间
    const end = new Date(today.getFullYear(), today.getMonth(), today.getDate(), 23, 59, 59, 999); // 今天结束时间
    
    const todayOrders = await Order.find({
      orderTime: { $gte: start, $lte: end }
    }); // 查询今日订单
    
    let totalGMV = 0; // 总GMV
    let completedOrders = 0; // 已完成订单数
    
    todayOrders.forEach(order => {
      totalGMV += order.amount; // 累计GMV
      if (order.status === '已完成') {
        completedOrders++; // 统计已完成订单
      }
    });
    
    console.log('今日GMV统计:'); // 统计标题
    console.log(`- 总订单数: ${todayOrders.length}`); // 总订单数
    console.log(`- 总GMV: ¥${totalGMV.toLocaleString()}`); // 总GMV
    console.log(`- 已完成订单: ${completedOrders}`); // 已完成订单数
    console.log(`- 平均订单金额: ¥${todayOrders.length > 0 ? Math.round(totalGMV / todayOrders.length) : 0}`); // 平均订单金额
    
    console.log('数据初始化完成！'); // 完成提示
    console.log('现在可以启动前端应用查看GMV数据了'); // 启动提示
    
    process.exit(0); // 退出程序
    
  } catch (error) {
    console.error('数据初始化失败:', error); // 错误提示
    process.exit(1); // 错误退出
  }
};

// 运行初始化
initData(); // 执行初始化 